#ifndef ABSUI_UI_COMMAND_HPP
#define ABSUI_UI_COMMAND_HPP

#include "AbsUI/AbsUIConfig.hpp"
#include <boost/signals/trackable.hpp>

namespace AbsUI
{

/// @ingroup AbsUI
/// @brief It provides the basic interface to be fulfilled by all the user interface commands.
///
/// A user interface command is connected to an action from the UI.
class ABSUI_API UICommand: boost::signals::trackable
{
public:
	/// @brief Dummy destructor.
	virtual ~UICommand();

	/// @brief It executes the logic of the command. 
	/// @return true if the command was executed successfully or false otherwise.
	virtual bool execute( bool checked = false) = 0;

};

} // namespace AbsUI

#endif // ABSUI_UI_COMMAND_HPP
